home *** CD-ROM | disk | FTP | other *** search
- #include <TNB.H>
- #include <pcmlib.h>
- #include "cd2pcm.h"
- #include "extern.h"
-
- void convert( int len )
- {
- int rc;
- if ( test_fg!=0 ){
- write_size += len; /* DISKに書き込んだサイズ*/
- return;
- }
- switch( pcm_mode ){
- case 0:
- /*------------ 44.1kHz 16BIT ステレオ ------------*/
- /*---- Intel列びを直す ----*/
- if ( sct_fg == 0 ){ /* SCSITAI 使用フラグ*/
- printf_(" ★Convert [Intel -> Motorola]" CFC "\n" CUP);
- if ( dma_fg!=0 && mach2_fg==0 )
- PLH2P16__( CDPCM_ptr+1,len );
- else PLH2P16( (void*)CDPCM_ptr,(void*)CDPCM_ptr,len );
- }
- /*---- レート変更 ----*/
- if ( pcm_rate==22050 ){
- printf_(" ★Convert [44.100kHz -> 22.050kHz]" CFC "\n" CUP );
- len = PCMHRATE_( CDPCM_ptr,len );
- }
- /*---- 書き込む ----*/
- printf_(" ★Disk Writing" CFC "\n" CUP);
- rc = WRITE( hdl, CDPCM_ptr, len );
- if ( rc != len ){
- printf("書き込みエラー\n");
- CLOSE(hdl);
- EndtDisp(1);
- }
- write_size += len; /* DISKに書き込んだサイズ*/
- break;
- case CONVERT_PCMA:
- /*------------ 44.1kHz ADPCM ------------*/
- /*---- Intel列びを直す ----*/
- if ( sct_fg == 0 ){ /* SCSITAI 使用フラグ*/
- printf_(" ★Convert [Intel -> Motorola]" CFC "\n" CUP);
- if ( dma_fg!=0 && mach2_fg==0 )
- PLH2P16__( CDPCM_ptr+1,len );
- else PLH2P16( (void*)CDPCM_ptr,(void*)CDPCM_ptr,len );
- }
- /*---- レート変更 ----*/
- if ( pcm_rate==22050 ){
- printf_(" ★Convert [44.100kHz -> 22.050kHz]" CFC "\n" CUP );
- len = PCMHRATE_( CDPCM_ptr,len );
- }
- /*---- YM2608 ADPCM に変換 -----*/
- printf_(" ★Convert [PCM -> YM2608 ADPCM]" CFC "\n" CUP);
- PTOA_EXEC( CDPCM_ptr,CDPCM_ptr,len );
- len/=4; // 同じアドレスでも大丈夫のはず
- /*---- 書き込む ----*/
- printf_(" ★Disk Writing" CFC "\n" CUP);
- rc = WRITE( hdl, CDPCM_ptr, len );
- if ( rc != len ){
- printf("書き込みエラー\n");
- CLOSE(hdl);
- EndtDisp(1);
- }
- write_size += len; /* DISKに書き込んだサイズ*/
- break;
- case CONVERT_A88:
- /*------------ 88.2kHz ADPCM ------------*/
- /*---- Intel列びを直す ----*/
- if ( sct_fg == 0 ){ /* SCSITAI 使用フラグ*/
- printf_(" ★Convert [Intel -> Motorola]" CFC "\n" CUP);
- if ( dma_fg!=0 && mach2_fg==0 )
- PLH2P16__( CDPCM_ptr+1,len );
- else PLH2P16( (void*)CDPCM_ptr,(void*)CDPCM_ptr,len );
- }
- /*---- レート変更 ----*/
- printf_(" ★Convert [44.100kHz -> 88.200kHz]" CFC "\n" CUP );
- len = PCMDRATE_( CDPCM_ptr,len,CDPCMM_ptr );
- /*---- YM2608 ADPCM に変換 -----*/
- printf_(" ★Convert [PCM -> YM2608 ADPCM]" CFC "\n" CUP);
- PTOA_EXEC( CDPCMM_ptr,CDPCMM_ptr,len );
- len/=4; // 同じアドレスでも大丈夫のはず
- /*---- 書き込む ----*/
- printf_(" ★Disk Writing" CFC "\n" CUP);
- rc = WRITE( hdl, CDPCMM_ptr, len );
- if ( rc != len ){
- printf("書き込みエラー\n");
- CLOSE(hdl);
- EndtDisp(1);
- }
- write_size += len; /* DISKに書き込んだサイズ*/
- break;
- case CONVERT_WAVE:
- /*------------ 44.1kHz 16BIT ステレオ ------------*/
- /*---- レート変更 ----*/
- if ( pcm_rate==22050 ){
- printf_(" ★Convert [44.100kHz -> 22.050kHz]" CFC "\n" CUP );
- len = PCMHRATE_( CDPCM_ptr,len );
- }
- /*---- 書き込む ----*/
- printf_(" ★Disk Writing" CFC "\n" CUP);
- rc = WRITE( hdl, CDPCM_ptr, len );
- if ( rc != len ){
- printf("書き込みエラー\n");
- CLOSE(hdl);
- EndtDisp(1);
- }
- write_size += len; /* DISKに書き込んだサイズ*/
- break;
- case CONVERT_PCMR:
- case CONVERT_PCML:
- case CONVERT_PCMM:
- /*------------ 44.1kHz 16BIT モノラル ------------*/
- /*---- Intel列びを直し、モノラルに ----*/
- switch( pcm_mode ){
- case CONVERT_PCMR:
- printf_(" ★Convert [Intel stereo -> Motorola mono] (right only)" CFC "\n" CUP);
- len = PLH2PCMMONO( CDPCM_ptr,CDPCM_ptr,len,2 );
- break;
- case CONVERT_PCML:
- printf_(" ★Convert [Intel stereo -> Motorola mono] (left only)" CFC "\n" CUP);
- len = PLH2PCMMONO( CDPCM_ptr,CDPCM_ptr,len,1 );
- break;
- case CONVERT_PCMM:
- printf_(" ★Convert [Intel stereo -> Motorola mono] (mix)" CFC "\n" CUP);
- len = PLH2PCMMONO( CDPCM_ptr,CDPCM_ptr,len,0 );
- break;
- }
- ///*---- ボリュームいじる ----*/
- //len = PCMVOL( CDPCMM_ptr,CDPCM_ptr,len,waru,4 );
- /*---- 書き込む ----*/
- printf_(" ★Disk Writing" CFC "\n" CUP);
- rc = WRITE( hdl, CDPCM_ptr, len );
- if ( rc != len ){
- printf("書き込みエラー\n");
- CLOSE(hdl);
- EndtDisp(1);
- }
- write_size += len; /* DISKに書き込んだサイズ*/
- break;
-
- case CONVERT_PCM15:
- /*------------ 15.6kHz モノラル ------------*/
- /*---- Intel列びを直し、モノラルに ----*/
- switch( convert_mode ){
- case CONVERT_R:
- case CONVERT_AVE_R:
- printf_(" ★Convert [Intel stereo -> Motorola mono] (right only)" CFC "\n" CUP);
- len = PLH2PCMMONO( CDPCM_ptr,CDPCM_ptr,len,2 );
- break;
- case CONVERT_L:
- case CONVERT_AVE_L:
- printf_(" ★Convert [Intel stereo -> Motorola mono] (left only)" CFC "\n" CUP);
- len = PLH2PCMMONO( CDPCM_ptr,CDPCM_ptr,len,1 );
- break;
- case CONVERT_M:
- case CONVERT_AVE_M:
- printf_(" ★Convert [Intel stereo -> Motorola mono] (mix)" CFC "\n" CUP);
- len = PLH2PCMMONO( CDPCM_ptr,CDPCM_ptr,len,0 );
- break;
- }
- /*---- 44.1kHz -> 15.6kHz & ボリュームいじる ----*/
- switch( convert_mode ){
- case CONVERT_AVE_R:
- case CONVERT_AVE_L:
- case CONVERT_AVE_M:
- printf_(" ★Convert [44.100kHz -> %skHz] (supp.)" CFC "\n" CUP ,pcm_rate_str);
- if ( waru==4 )
- len = PCMFFREQ( (void*)CDPCMM_ptr,(void*)CDPCM_ptr,len,pcm_rate,44100);
- else len = PCMFFREQVOL( (void*)CDPCMM_ptr,(void*)CDPCM_ptr,len,pcm_rate,44100,waru,4);
- break;
- case CONVERT_M:
- case CONVERT_R:
- case CONVERT_L:
- printf_(" ★Convert [44.100kHz -> %skHz]" CFC "\n" CUP ,pcm_rate_str);
- if ( waru==4 )
- len = PCMFREQ( (void*)CDPCMM_ptr,(void*)CDPCM_ptr,len,pcm_rate,44100);
- else len = PCMFREQVOL( (void*)CDPCMM_ptr,(void*)CDPCM_ptr,len,pcm_rate,44100,waru,4);
- break;
- }
- if ( adpcm_flg == 0 ){
- /*---- 15.6kHz 16BIT MONAURAL データ書き込み ----*/
- printf_(" ★Disk Writing" CFC "\n" CUP);
- rc = WRITE( hdl, CDPCMM_ptr, len );
- } else {
- /*---- ADPCM に変換、データ書き込み -----*/
- printf_(" ★Convert [PCM -> ADPCM]" CFC "\n" CUP);
- len=P162PCM( CDPCM_ptr,(void*)CDPCMM_ptr,len );
- printf_(" ★Disk Writing" CFC "\n" CUP);
- rc = WRITE( hdl, CDPCM_ptr, len );
- }
- if ( rc != len ) {
- printf("書き込みに失敗しました。\n");
- CLOSE(hdl);
- EndtDisp(1);
- }
- write_size += len; /* DISKに書き込んだサイズ*/
- }
- return;
- }
-
- asm("
-
- *****************************************************************
- * Intel 44.1kHz 16BIT ステレオ *
- * ↓ *
- * Motorola 44.1kHz 16BIT モノラル *
- *****************************************************************
- _PLH2PCMMONO::
-
- ~src_ptr reg a5
- ~dest_ptr reg a4
- ~param reg d7
- ~src_size reg d6
-
- * in 4(sp) pcm data(16bit) out data address (motorola)
- * 8(sp) pcm data(16bit) in data address (intel)
- * 12(sp) pcm data(16bit) data size(n byte)
- * 16(sp) monoral mode 0=(L+R)/2,1=L,2=R,3=L+R
-
- * out d0 pcm data(16bit) data size(n byte)
-
- movem.l d1-d7/a0-a6,-(sp)
-
- move.l 4*14+4(sp),~dest_ptr
- move.l 4*14+8(sp),~src_ptr
- move.l 4*14+12(sp),~src_size
- move.l 4*14+16(sp),~param
-
- andi.w #3,~param
- lsr.l #2,~src_size
-
- tst.l ~src_size
- beq 9f
-
- cmpi.w #2,~param
- bhi PMONO_main_LR
- beq PMONO_main_R
- tst.w ~param
- bne PMONO_main_L
- PMONO_main_LRMIX:
- @@:
- move.w (~src_ptr)+,d0
- ror.w #8,d0 *intel->moto
- move.w (~src_ptr)+,d1
- ror.w #8,d1 *intel->moto
- ext.l d0
- ext.l d1
- add.l d1,d0
- asr.l #1,d0
- move.w d0,(~dest_ptr)+
- subq.l #1,~src_size
- bne @b
- bra 9f
- PMONO_main_L:
- @@:
- move.w (~src_ptr)+,d0
- ror.w #8,d0 *intel->moto
- move.w d0,(~dest_ptr)+
- addq.w #2,~src_ptr
- subq.l #1,~src_size
- bne @b
- bra 9f
- PMONO_main_R:
- @@:
- addq.w #2,~src_ptr
- move.w (~src_ptr)+,d0
- ror.w #8,d0 *intel->moto
- move.w d0,(~dest_ptr)+
- subq.l #1,~src_size
- bne @b
- bra 9f
- PMONO_main_LR:
- @@:
- move.w (~src_ptr)+,d0
- ror.w #8,d0 *intel->moto
- move.w (~src_ptr)+,d1
- ror.w #8,d1 *intel->moto
- add.w d1,d0
- move.w d0,(~dest_ptr)+
- subq.l #1,~src_size
- bne @b
- *bra 9f
- 9:
- move.l 4*14+12(sp),d0
- lsr.l #1,d0
- movem.l (sp)+,d1-d7/a0-a6
- rts
-
- *****************************************************************
- * Intel 16BIT ステレオ *
- * ↓ *
- * Motorola 16BIT ステレオ *
- *****************************************************************
- _PLH2P16__:
-
- * in 4(sp) pcm data(16bit) data address (変換後は -2 からが)
- * 8(sp) pcm data(16bit) data size(n byte)
- *
- * out d0 pcm data(16bit) data size(n byte)
-
- lea $CBC.w,a1
- moveq #$82,d0 *IOCS _B_BPEEK
- trap #15
- cmpi.b #3+1,d0
- bcs _PLH2P16_M0
- *--- MPU 4~
- move.l 4(sp),a0
- move.l 8(sp),d0
- @@:
- cmpi.l #128,d0
- bcs _PLH2P16_EE
- .rept 4 * 128byte 分処理
- move.b 1(a0),-1(a0)
- move.b 3(a0),1(a0)
- move.b 5(a0),3(a0)
- move.b 7(a0),5(a0)
- move.b 9(a0),7(a0)
- move.b 11(a0),9(a0)
- move.b 13(a0),11(a0)
- move.b 15(a0),13(a0)
- move.b 17(a0),15(a0)
- move.b 19(a0),17(a0)
- move.b 21(a0),19(a0)
- move.b 23(a0),21(a0)
- move.b 25(a0),23(a0)
- move.b 27(a0),25(a0)
- move.b 29(a0),27(a0)
- move.b 31(a0),29(a0)
- lea 2*16(a0),a0
- .endm
- sub.l #128,d0
- bra @b
-
- _PLH2P16_M0:
- *--- MPU 0 3
- move.l 4(sp),a0
- move.l 8(sp),d0
- @@:
- cmpi.l #256,d0
- bcs _PLH2P16_EE
- .rept 8 * 256byte 分処理
- movep.l 1(a0),d1 *4
- movep.l d1,-1(a0)
- movep.l 9(a0),d1 *4
- movep.l d1,7(a0)
- movep.l 17(a0),d1 *4
- movep.l d1,15(a0)
- movep.l 25(a0),d1 *4
- movep.l d1,23(a0)
- lea 2*16(a0),a0
- .endm
- sub.l #256,d0
- bra @b
-
- _PLH2P16_EE:
- tst.l d0
- beq 1f
- @@:
- move.b 1(a0),-1(a0)
- addq.l #2,a0
- subq.l #2,d0 * byte なので...
- bne @b
- 1:
- move.l 8(sp),d0
- rts
-
-
- *****************************************************************
- * ステレオ half rate *
- *****************************************************************
- _PCMHRATE_::
-
- * in 4(sp) pcm data(16bit) data address
- * 8(sp) pcm data(16bit) data size(n byte)
- *
- * out d0 pcm data(16bit) data size(n byte)
-
- move.l 4(sp),a0
- movea.l a0,a1
- move.l 8(sp),d0
- lsr.l #3,d0 * 1/8 。4の倍数のはず..
- @@:
- move.l (a0),(a1)+
- addq.l #8,a0
- subq.l #1,d0
- bne @b
-
- move.l 8(sp),d0
- lsr.l #1,d0 * 1/2 。
- rts
-
- *****************************************************************
- * ステレオ double rate *
- *****************************************************************
- _PCMDRATE_::
-
- * in 4(sp) pcm data(16bit) data address
- * 8(sp) pcm data(16bit) data size(n byte)
- * 12(sp) out 用pcm data address
- *
- * out d0 pcm data(16bit) data size(n byte)
-
- movea.l 4(sp),a0
- movea.l 12(sp),a1
- move.l 8(sp),d0
- lsr.l #2,d0 * 1/4 。4の倍数のはず..
- @@:
- move.w (a0)+,d1
- move.w (a0)+,d2
- move.w d1,(a1)+
- move.w d2,(a1)+
- move.w d1,(a1)+
- move.w d2,(a1)+
- subq.l #1,d0
- bne @b
-
- move.l 8(sp),d0
- add.l d0,d0 * 1/2 。
- rts
-
-
- *****************************************************************
- * YM ADPCM 可!! *
- *****************************************************************
-
- *機能: PCM->ADPCM変換用のバッファを作成します。
- * これを実行しないと変換ができません。
- _PTOA_MAKE_BUFFER::
- jbra ptoa_make_buffer
- * rts
-
- _PTOA_INIT::
- move.l #-1,d0
- jbra ptoa_init
- * rts
-
- _PTOA_EXEC::
- move.l 4(sp),a1 * ADPCMのアドレス
- move.l 8(sp),a0 * PCMのアドレス
- move.l 12(sp),d0 * PCMのサイズ
- jbra ptoa_exec * PCM->ADPCM変換を実行
- * rts
-
-
- ");
- /**********************************
- 名前計算
- **********************************/
- char *NameCenter(na)
- unsigned char *na;
- {
- #define jstrlen_(SR) \
- ({ char *st_=(SR); int l_=0,c_; \
- while( c_=*(st_++) ){ \
- l_++; \
- if ( (c_>=0x80&&c_<=0x9f)||c_>=0xE0 ){ \
- if ( c_>0x80 && c_<0xF0 ) \
- l_++; \
- st_++; \
- } \
- } (l_); \
- })
- int i,l,c;
- static unsigned char buf[64];
- unsigned char *s;
- unsigned char *ac=buf;
- i=0;
- s=(void*)CDCTNAME(-1);
- if ( s!=0 && s[0]!=' ' ){ // CD名
- l=jstrlen_(na);
- for(;i<(36-l)/2;i++)
- *ac++=0x20;
- }
- for(;i<36-1+1;){
- c=*na++;
- if ( c==0 )
- break;
- i++;
- *ac++=c;
- if ( (c>=0x80 && c<=0x9f) || c>=0xE0 ){
- i++;
- *ac++=*na++;
- }
- }
- for(;i<36-1+1;i++)
- *ac++=0x20;
- *ac=0;
- return(buf);
- }
- /********************************************************
- CDC連絡
- ********************************************************/
- int CDCID()
- {
- if ( CDC_CHK()==0 )
- return(-1);
- if ( CDC_VERSION()<0x109 )
- return(-1);
- if ( CDC_POWER(-1)==0 )
- return(-1);
- if ( CDC_CHGLUN(-1)>=100 ) // JUKE BOX になっている
- return(-1);
- return( CDC_SCSIID() );
- }
- /*+++++++*/
- char *CDCTNAME(t)
- int t;
- {
- struct CDC_TRACKS_PTR *TP;
- struct CDC_ATRACK_PTR *AP;
- char *s;
- if ( CDCID()<0 )
- return(0);
- if ( t<0 ){
- TP=CDC_TRACKS();
- s=(void*)&(TP->CDNAME);
- } else {
- AP=CDC_ATRACK(t);
- s=AP->NAME;
- }
- if ( *s==0 )
- return(0);
- return(s);
- }
- /*+++++++*/
- void CDCRESET()
- {
- if ( CDCID()<0 )
- return;
- CDC_RELED();
- }